return 0;
}
+static int fn_safe(const struct var_expand_statement *stmt ATTR_UNUSED,
+ struct var_expand_state *state,
+ const char **error_r ATTR_UNUSED)
+{
+ state->transfer_safe = TRUE;
+ return 0;
+}
+
static const struct var_expand_filter var_expand_builtin_filters[] = {
{ .name = "lookup", .filter = fn_lookup },
{ .name = "literal", .filter = fn_literal },
{ .name = "text", .filter = fn_text },
{ .name = "encrypt", .filter = expansion_filter_encrypt },
{ .name = "decrypt", .filter = expansion_filter_decrypt },
+ { .name = "safe", .filter = fn_safe },
{ .name = NULL }
};
if (state.transfer_binary)
var_expand_state_set_transfer(&state, binary_to_hex(state.transfer->data, state.transfer->used));
if (state.transfer_set) {
- if (!program->only_literal && params->escape_func != NULL) {
+ if (!program->only_literal && !state.transfer_safe &&
+ params->escape_func != NULL) {
str_append(state.result,
params->escape_func(str_c(state.transfer),
params->escape_context));